/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import pe.edu.pucp.Maestros.Controlador.MaestroVueloControlador;
import pe.edu.pucp.Maestros.DAO.AeropuertoDAO;
import pe.edu.pucp.Maestros.DAO.AvionDAO;
import pe.edu.pucp.Maestros.DAO.MaestoVueloDAO;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Modelo.Vuelo;

/**
 *
 * @author pedro
 */
public class Utilitario {
    
    
    
    public ArrayList<Vuelo> CargarBDXml(String Ruta, int idOrigen, Usuario usr){
        //Se crea un SAXBuilder para poder parsear el archivo
        SAXBuilder builder = new SAXBuilder();
        File xmlFile = new File(Ruta);

        ArrayList<Vuelo> salida = new ArrayList<>();
        //Se crea el documento a traves del archivo
        Document document = null;
        try {
            document = (Document) builder.build( xmlFile );
        } 
        catch (JDOMException | IOException ex) { }

        //Se obtiene la raiz 'tables -> en mi caso es Vuelos'
        Element rootNode = document.getRootElement();

        //Se obtiene la lista de hijos de la raiz 'tables ->Vuelos'
        List list = rootNode.getChildren( "Vuelo" );

        for(int i=0;i<list.size();i++){
            Element vuelo = (Element)list.get( i );
            Vuelo v = new Vuelo();
            AeropuertoDAO aeropuerto = new AeropuertoDAO();
            AvionDAO avion = new AvionDAO();
            MaestoVueloDAO  vdao= new MaestoVueloDAO();

            v.setAeropuertoByIdorigen(aeropuerto.listarUnAeropuerto(idOrigen));
            v.setAeropuertoByIddestino(aeropuerto.listarUnAeropuerto(Integer.parseInt(vuelo.getChildTextTrim("idDestino"))));
            v.setAvion(avion.listarUnAvion(Integer.parseInt(vuelo.getChildTextTrim("idAvion"))));
            v.setEstadoVuelo(vdao.ListarEstadoVuelo(Integer.parseInt(vuelo.getChildTextTrim("idEstado"))));

            try {
                v.setLlegadaest(convertStringToTimeStamp(vuelo.getChildTextTrim("llegadaEst")));
            } catch (ParseException ex) { }

            try {
                v.setSalidaest(convertStringToTimeStamp(vuelo.getChildTextTrim("SalidaEst")));
            } catch (ParseException ex) { }
            v.setRecorrido(Double.parseDouble(vuelo.getChildTextTrim("recorrido")));
            v.setNumpack(Integer.parseInt(vuelo.getChildTextTrim("numPack")));
            v.setRetraso((vuelo.getChildTextTrim("retraso")));
            v.setCosto(Double.parseDouble(vuelo.getChildTextTrim("costo")));
            salida.add(v);                               
        }

        MaestoVueloDAO m = new MaestoVueloDAO();

        for(Vuelo v : salida){
            m.guadarVuelo(v);
        }
        LogHelper.registrarOperacion(usr, Constante.ACCION_CARGAR, Constante.OBJETO_VUELO, "Se cargaron "+salida.size()+" registros de vuelo");
        return salida;
}    
    
    public void GenerarXML(ArrayList<Vuelo> Lista){
        Element root = new Element("Vuelos");
        
        for(int y=0;y<Lista.size();y++){
            Element articulo = new Element("Vuelo");
                        
            Element IdVuelo = new Element ("idVuelo").setText(String.valueOf(Lista.get(y).getIdvuelo()));
            Element IdOrigen = new Element ("idOrigen").setText(String.valueOf(Lista.get(y).getAeropuertoByIdorigen().getIdaeropuerto()));
            Element IdDestino = new Element ("idDestino").setText(String.valueOf(Lista.get(y).getAeropuertoByIddestino().getIdaeropuerto()));
            Element IdAvion = new Element ("idAvion").setText(String.valueOf(Lista.get(y).getAvion().getIdavion()));
            Element IdEstado = new Element ("idEstado").setText(String.valueOf(Lista.get(y).getEstadoVuelo().getIdestado()));
            Element Salida = new Element ("salida").setText(" ");
            Element Llegada = new Element ("llegada").setText(" ");
            Element LlegadaEst = new Element ("llegadaEst").setText(convertirDateToString(Lista.get(y).getLlegadaest()));
            Element SalidaEst = new Element ("SalidaEst").setText(convertirDateToString(Lista.get(y).getSalidaest()));
            Element Recorrido = new Element ("recorrido").setText(String.valueOf(Lista.get(y).getRecorrido()));
            Element NumPack = new Element ("numPack").setText(String.valueOf(Lista.get(y).getNumpack()));
            Element Retraso = new Element ("retraso").setText(Lista.get(y).getRetraso());
            Element Costo = new Element ("costo").setText(String.valueOf(Lista.get(y).getCosto()));
            
            
            articulo.addContent(IdVuelo);
            articulo.addContent(IdOrigen);
            articulo.addContent(IdDestino);
            articulo.addContent(IdAvion);
            articulo.addContent(IdEstado);
            articulo.addContent(Salida);
            articulo.addContent(Llegada);
            articulo.addContent(LlegadaEst);
            articulo.addContent(SalidaEst);
            articulo.addContent(Recorrido);
            articulo.addContent(NumPack);
            articulo.addContent(Retraso);
            articulo.addContent(Costo);
            
            root.addContent(articulo);
        }        
        //Creamos el documento
        Document doc = new Document(root);
        try{
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            try (FileOutputStream file = new FileOutputStream("/home/pedro/Escritorio/1xxxx.xml")) {
                out.output(doc,file);
            }
        } catch(Exception e){ }                    
    }
    
    public ArrayList<Vuelo> MostrarXml(String Ruta){
        //Se crea un SAXBuilder para poder parsear el archivo
        SAXBuilder builder = new SAXBuilder();
        File xmlFile = new File(Ruta);
          
        ArrayList<Vuelo> salida = new ArrayList<>();
        //Se crea el documento a traves del archivo
        Document document = null;
        try {
            document = (Document) builder.build( xmlFile );
        } 
        catch (JDOMException | IOException ex) { }                    
        //Se obtiene la raiz 'tables -> en mi caso es Vuelos'
        Element rootNode = document.getRootElement();

        //Se obtiene la lista de hijos de la raiz 'tables ->Vuelos'
        List list = rootNode.getChildren( "Vuelo" );

        for(int i=0;i<list.size();i++){
            Element vuelo = (Element)list.get( i );
            Vuelo v = new Vuelo();
            AeropuertoDAO aeropuerto = new AeropuertoDAO();
            AvionDAO avion = new AvionDAO();
            MaestoVueloDAO  vdao= new MaestoVueloDAO();
            v.setIdvuelo(Integer.parseInt(vuelo.getChildTextTrim("idVuelo")));
            v.setAeropuertoByIdorigen(aeropuerto.listarUnAeropuerto(Integer.parseInt(vuelo.getChildTextTrim("idOrigen"))));
            v.setAeropuertoByIddestino(aeropuerto.listarUnAeropuerto(Integer.parseInt(vuelo.getChildTextTrim("idDestino"))));
            v.setAvion(avion.listarUnAvion(Integer.parseInt(vuelo.getChildTextTrim("idAvion"))));
            v.setEstadoVuelo(vdao.ListarEstadoVuelo(Integer.parseInt(vuelo.getChildTextTrim("idEstado"))));

            try {
                v.setLlegadaest(convertStringToTimeStamp(vuelo.getChildTextTrim("llegadaEst")));
            } catch (ParseException ex) { }

            try {
                v.setSalidaest(convertStringToTimeStamp(vuelo.getChildTextTrim("SalidaEst")));
            }
            catch (ParseException ex) { }
                v.setRecorrido(Double.parseDouble(vuelo.getChildTextTrim("recorrido")));
                v.setNumpack(Integer.parseInt(vuelo.getChildTextTrim("numPack")));
                v.setRetraso((vuelo.getChildTextTrim("retraso")));
                v.setCosto(Double.parseDouble(vuelo.getChildTextTrim("costo")));
                salida.add(v);                               
        }
        return salida;
    }
                 
    public Date convertStringToTimeStamp(String dateToConvert) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date ldateFrom1 = (Date) sdf.parse(dateToConvert);
        return ldateFrom1;
    }
            
    public String convertirDateToString(Date dateToConvert) {
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String enString = (String) myFormat.format(dateToConvert);
        return enString;    
    }
            
    public static double truncate(double x){
        long y=(long)(x*100);
        return (double)y/100;
    }
    
    public static String parsearMensajeError(String mensaje) {                
        int spacePosition = mensaje.indexOf(" ");
        String objetoString = mensaje.substring(0, spacePosition);
        
        String mensajeError = objetoString.substring(objetoString.lastIndexOf(".")+1) + " " +mensaje.substring(spacePosition);
        return mensajeError;
    }
}
